#   Copyright 2013 Stacy Doss stacy.doss@gmail.com
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.

package DIME::Data::Config;

use strict;
use warnings;

use Storable qw(store retrieve);

sub new {

	my $class  = shift;
	my $parent = shift;
		
	my $T = {
        parent => $parent,
        config => {
            views => {
                browser => 1,
                cli     => 0,
                search  => 0,
                path    => 1,
                hlist   => 0,
                'undef' => 0,
                filter  => 0,
            },
        },
	};
		
	bless $T, $class;

	return $T;
}



sub getRawConfig {
    my $self = shift;
    
    return $self->{config};
}



sub getOption {
    my $self = shift;
    my $key  = shift;

    if (exists $self->{config}{views}{$key}) {
        return $self->{config}{views}{$key};
    } else {
        print STDERR "unknown option $key\n";
    }
}



sub getOptionNames {
    my $self = shift;
    
    return [keys %{$self->{config}{views}}];
}



sub load {
    my $self     = shift;
    my $filename = shift || '.dimerc';

    if (-e $filename) {
        $self->{config} = retrieve($filename);
    }

    return $self->{config};
}



sub save {
    my $self = shift;
    my $filename = shift || ".dimerc";

    store($self->{config}, $filename);
}



sub toggleView {
    my $self = shift;
    my $name = shift;
    
    my $views = $self->{config}{views};
    if (exists $views->{$name}) {
        $self->{config}{views}{$name} = not $self->{config}{views}{$name}; 
        return $self->{config}{views}{$name};
    } else {
        print STDERR "Huh? Can't toggle $name\n";
        return undef;
    }
}


1;
